#ifndef IMAGESAVER_H
#define IMAGESAVER_H

#include <QImage>
#include <QString>
#include <QVariantMap>
#include <QDateTime>
#include <QCoreApplication>
#include "ImageCacheItem.h"
#include "FileHandler.h"

/**
 * @brief 图像保存类，负责将图像和相关参数保存到文件系统
 */
class ImageSaver : public FileHandler {
public:
    /**
     * @brief 构造函数，初始化错误信息和默认保存路径/格式
     */
    ImageSaver();
    
    /**
     * @brief 设置默认保存路径
     * @param path 默认保存路径
     */
    void setDefaultSavePath(const QString &path);
    
    /**
     * @brief 获取默认保存路径
     * @return 默认保存路径
     */
    QString getDefaultSavePath() const;
    
    /**
     * @brief 设置默认保存格式
     * @param format 默认保存格式（如"tif"、"png"等）
     */
    void setDefaultSaveFormat(const QString &format);
    
    /**
     * @brief 获取默认保存格式
     * @return 默认保存格式
     */
    QString getDefaultSaveFormat() const;
    
    /**
     * @brief 生成默认文件名
     * @param imageGuid 图像GUID
     * @return 生成的默认文件名（包含路径）
     */
    QString generateDefaultFileName(const QString &imageGuid);
    
    /**
     * @brief 简化的保存接口：直接传入ImageCacheItem进行保存
     * @param baseFilePath 基础文件路径（不包含扩展名）
     * @param cacheItem 要保存的ImageCacheItem对象
     * @return 保存成功返回true，失败返回false
     */
    bool saveImageCacheItem(const QString &baseFilePath, const ImageCacheItem &cacheItem);
    
private:
    /**
     * @brief 将QImage保存到指定文件路径
     * @param image 要保存的QImage对象
     * @param filePath 目标文件路径
     * @return 保存成功返回true，失败返回false
     */
    bool saveToFile(const QImage &image, const QString &filePath);
    
    /**
     * @brief 保存JSON参数到文件
     * @param filePath 目标文件路径
     * @param params 要保存的参数（按处理顺序排列的所有参数）
     * @param axisParams 坐标轴参数
     * @return 保存成功返回true，失败返回false
     */
    bool saveJsonParams(const QString &filePath, const QList<QVariantMap> &params, const AxisParameters &axisParams = AxisParameters());
    
    // 默认保存路径
    QString m_defaultSavePath;
    
    // 默认保存格式
    QString m_defaultSaveFormat;
};

#endif // IMAGESAVER_H
